package com.ylbh.modules.returngoods.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylbh.common.pojo.goodsorder.dto.OrderShipmentDTO;
import com.ylbh.common.pojo.goodsorder.vo.ExpressCompanyVO;
import com.ylbh.common.pojo.home.vo.HomeStateStatisticsVO;
import com.ylbh.common.pojo.returngoods.UserMailDTO;
import com.ylbh.common.pojo.returngoods.dto.ShoppingMallOrderReturnListDTO;
import com.ylbh.common.pojo.returngoods.dto.UpdateOrderReturnDetailsDTO;
import com.ylbh.common.pojo.returngoods.vo.*;
import com.ylbh.modules.returngoods.entity.ShoppingOrderReturn;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 *
 * 退货
 * @author czx
 * @date 2019-06-09 14:22:40
 */
@Mapper
@Repository
public interface ShoppingOrderReturnMapper extends BaseMapper<ShoppingOrderReturn> {

    /**
     * 商城订单退货列表
     * @param orderReturnListDTO
     * @param page
     * @return
     */
    List<ShoppingMallOrderReturnListVO> selectShoppingMallOrderReturnList(@Param(value = "dto") ShoppingMallOrderReturnListDTO orderReturnListDTO, Page<Object> page);

    /**
     * 对退货/退款/换货订单进行审核操作
     * @param returnId
     * @param type
     * @param remark
     * @param userId
     * @param date
     */
    void updateReturnStatusById(String returnId, String type, String remark, Long userId, Date date);

    /**
     * 修改子订单表中的状态
     * @param id
     * @param type
     */
    void updateGoodsCartById(List<String> id, String type);

    /**
     * 商城订单退货列表详情
     * @param returnId
     * @return
     */
    ShoppingMallOrderReturnDetailsVO selectShoppingMallOrderReturnDetails(String returnId);

    /**
     * 查询子订单商品信息
     * @param id
     * @return
     */
    OrderReturnGoodsVO selectGoodsCart(String id);

    /**
     * 查询出所有的物流公司信息
     * @return
     */
    List<ExpressCompanyVo> selectExpress();

    /**
     * 修改供应商是否打款给公司
     * @param returnId
     * @param type
     * @param date
     */
    void updateMakeMoneyType(String returnId, String type, Date date);

    /**
     * 查询商城订单表中的支付方式和流水号
     * @param orderNo
     * @return
     */
    RefundOrderFormVO selectOrderForm(String orderNo);

    /**
     * 查询退款用户的退款总金额
     * @param returnId
     * @return
     */
    RefundAmountVO selectRefundAmount(String returnId);

    /**
     * 根据当前类型来修改物流号
     * @param type
     * @param orderShipmentDTO
     */
    void updateLogisticsInformation(@Param(value = "type") Integer type, @Param(value = "dto") OrderShipmentDTO orderShipmentDTO);

    /**
     * 供应商确认收货
     * @param returnId
     * @param userId
     * @param date
     */
    void updateVendorConfirmation(String returnId, Long userId, Date date);

    /**
     * 换货订单-供应商发货
     * @param dto
     * @param userId
     */
    void updateSupplierDelivery(@Param(value = "dto") OrderShipmentDTO dto, Long userId);

    /**
     * 子订单信息
     * @param id
     * @param returnId
     * @return
     */
    SonOrderReturnVO selectSonOrder(String id, String returnId);

    /**
     * 修改退换货详情信息
     * @param dto
     */
    void updateReturnGoodsById(UpdateOrderReturnDetailsDTO dto);

    /**
     * 退换货未审核订单开始
     * @return
     */
    List<HomeStateStatisticsVO> selectOrderReturn();

    /**
     * 查询售后订单的状态
     * @param returnId
     * @return
     */
    int selectIsAfterSalesOrders(String returnId);

    /**
     * 针对售后订单进行用户寄件
     * @param userMailDTO
     * @param date
     */
    void updateMailingById(@Param(value = "userMailDTO") UserMailDTO userMailDTO,
                           @Param(value = "date") Date date,
                           @Param(value = "userId") Long userId);

    /**
     * 根据名字查询出物流公司id
     * @param companyName
     * @return
     */
    Integer selectExpressByName(@Param(value = "companyName") String companyName);

    ReturnMoneyVO selectReturnMoney(String id);
}
